package Controller;

import Behavior.CannotFly;
import Behavior.flyWithBags;
import Impl.Facade;
import Impl.HouseObserver;
import Impl.Scene;
import Impl.Subject;
import Model.House;
import Model.Person;
import Person.*;
import Plane.PlaneSituation;

import java.util.ArrayList;

public class SceneSix implements Scene {
    /**
     * 最后两个场景是连贯的，将他们放在一个Scene中连续执行
     */
    @Override
    public void SceneSimu() throws InterruptedException {
        System.out.println("-----------SCENE 4------------");
        House house = new House();
        Person boy = new Boy();
        Person girl = new Girl();
        ArrayList<Person> facadeList = new ArrayList<>();
        facadeList.add(boy);
        facadeList.add(girl);
        Facade facade = new Facade(facadeList);
        //现在还不会飞，使用策略模式设置cannotFLy动作
        boy.setFlyBehavior(new CannotFly());
        girl.setFlyBehavior(new CannotFly());
        System.out.println("Alarm!!! 人物开始进入House");Thread.sleep(2000);
        //使用观察者模式通知各个人物躲进House
        Subject planeSitu = new PlaneSituation(house);
        planeSitu.addObserver((HouseObserver)boy);
        planeSitu.addObserver((HouseObserver)girl);
        planeSitu.notifyObserver();
        ArrayList<Person> personList = house.getList();
        //展示house中的人物列表
        System.out.println("已经在House中的人物开始报告：");
        for(Person person:personList){
            person.display();
        }
        Thread.sleep(2000);
        System.out.println("-----------SCENE 5------------");
        //先使用策略模式让House中的人物可以使用飞行背包飞行
        System.out.println("他们装备上了飞行背包");
        for(Person person:personList){
            person.setFlyBehavior(new flyWithBags());
        }
        Thread.sleep(2000);
        //然后冲出House，使用facade模式让他们飞上天空，享受自由
        for(Person person:personList){
            house.removeList(person);
        }
        facade.FlyActive();
    }
}
